Correct ref transfer in GtkTreeModelFilter rows-reordered handling
authorKristian Rietveld <kris@gtk.org>
Sun, 24 Jul 2011 16:46:46 +0000 (18:46 +0200)
committerKristian Rietveld <kris@gtk.org>
Mon, 22 Aug 2011 19:30:33 +0000 (21:30 +0200)
gtk/gtktreemodelfilter.c

index cb51fe5353798997497a2461927ed1b8d2366d1f..75f486db3ea329220340af23b5658d20a600b6ba 100644 (file)
@@ -2475,6 +2475,7 @@ gtk_tree_model_filter_rows_reordered (GtkTreeModel *c_model,
   gint *tmp_array;
   gint i, j, elt_count;
   gint length;
+  gint first_elt_new_index = -1;
 
   GArray *new_array;
 
@@ -2610,6 +2611,9 @@ gtk_tree_model_filter_rows_reordered (GtkTreeModel *c_model,
       if (!e)
         continue;
 
+      if (old_offset == 0)
+        first_elt_new_index = elt_count;
+
       tmp_array[elt_count] = old_offset;
       g_array_append_val (new_array, *e);
       g_array_index (new_array, FilterElt, elt_count).offset = i;
@@ -2630,10 +2634,10 @@ gtk_tree_model_filter_rows_reordered (GtkTreeModel *c_model,
   /* Transfer the reference from the old item at position 0 to the
    * new item at position 0.
    */
-  if (tmp_array[0] != 0)
+  if (first_elt_new_index != -1 && first_elt_new_index != 0)
     gtk_tree_model_filter_level_transfer_first_ref (filter,
                                                     level,
-                                                    tmp_array[0], 0);
+                                                    first_elt_new_index, 0);
 
 
   /* emit rows_reordered */